package com.bosssoft.hr.train.j2se.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.Objects;
import java.util.Set;

/**
 * @Class User
 * @Description 用来映射数据库的用户，继承BaseEntity 写出特有的成员即可
 * @Author TangZaoBang
 * @Date 2023/04/26 13:33
 */

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User extends BaseEntity {
    /**
     * 用户所拥有的多个角色，这里采用set不用list是避免role对象重复
     * 当然这个重复判定你hashcode和equal的判断字段
     * Map/Set的key为自定义对象时，必须重写hashCode和equals。
     */
    private Set<Role> roles;
    /**
     * 编号
     */
    private String code;
    /**
     * 姓名
     */
    private String name;
    /**
     * 密码
     */
    private String password;
    /**
     * 头像
     */
    private String profilePicture;
    /**
     * 生日
     */
    private Date birthday;
    /**
     *  电话号码
     */
    private String tel;
    /**
     *  邮箱
     */
    private String email;
    /**
     *  其他
     */
    private String other;
    /**
     * 备注
     */
    private String remark;
    /**
     * 部门id
     */
    private Long departmentId;
    /**
     * 职位id
     */
    private Long positionId;

    /**
     * 在Demo中用到
     * @author TangZaoBang
     * @date 2023/04/26 16:52
     * @param id
     * @param code
     * @param name
     * @return
     */
    public User(Long id,String code,String name){
        this.id=id;
        this.code=code;
        this.name=name;
    }

    public User(String name, Date birthday) {
        this.name=name;
        this.birthday=birthday;
    }


    /**
     * 重写equals ,只要code、name、id 一样就认为是同一个User
     * @author TangZaoBang
     * @date 2023/04/26 16:25
     * @param o
     * @return
     */
    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        if (!super.equals(o)) {
            return false;
        }
        User user = (User) o;
        return Objects.equals(code, user.code) &&
                Objects.equals(name, user.name)&&Objects.equals(id,user.id);
    }

    /**
     * 重写equals后一定要重写hashcode 依据 id code 和 name 来判别唯一
     * @author TangZaoBang
     * @date 2023/04/26 16:41
     * @return int
     */
    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), code, name, id);
    }

    @Override
    public String toString() {
        return "User{" +
                "code='" + code + '\'' +
                ", name='" + name + '\'' +
                ", id=" + id +
                '}';
    }



}
